#pragma once

#include "pgMat44.h"

/**
 Renderable objects interface.
 This is the objecttype the renderer uses to iterate through the 
 object to be renderered
 */
class IRenderableObject
{
public:

	virtual ~IRenderableObject() {}

	/**
	Loads a mesh from the specified filepath.
	The format is chosen by the extension
	@param szFilePath Path to the mesh file
	@returns true on success
	*/
	virtual bool Load(const char* szFilePath) = 0;

	/**
	Used for primitive derived objects.
	*/
	virtual bool Load() = 0;


	virtual pgMat44 GetWorldTransformMatrix() = 0;

	virtual void SetWorldTransformMatrix(pgMat44 mat) = 0;

	
	/**
	 This function needs to take care of rendering the object.
	Setting up data relevant to rendering should be performed in PreRender().
	 */
	virtual void Render() = 0;

	/**
	Called immmediately before Render().
	*/
	virtual void PreRender() = 0;

	/**
	Called immediately after Render().
	*/
	virtual void PostRender() = 0;
};